/* **************************************** */
/* ************  表单公用方法    ****************** */
/* *************************************** */

import {
  addObj,
  putObj,
} from '@/api/common';

import * as common from '@/utils/base/common';

/**
 * 添加 保存
 * 		注意：调用该公共方法，需约定条件：
 * 		  1. 必须有按钮禁用属性btnDisabled
 */
export function addSave(that_, restPath, form) {
  //	that_.$confirm('确认提交吗？').then(_ => {
  // 加载中 
  const loading = common.loading(that_, '正在保存，请稍候!')
  that_.btnDisabled = true // 按钮禁用

  addObj(restPath, form).then(response => {
    loading.close(); // 加载中 关闭
    that_.btnDisabled = false // 解除按钮禁用状态

    // 处理保存结果
    handleSaveRes(that_, response)
  }).catch(err => {
    loading.close() // 加载中 关闭
    that_.btnDisabled = false // 解除按钮禁用状态
    // 防止连续多次请求
    avoidMultRequest(that_)
    common.message(that_, 'error', 2, '调用接口失败!')
    console.error(err)
  })

}

/**
 * 修改 保存
 * 		注意：调用该公共方法，需约定条件：
 * 		  1. 必须有按钮禁用属性btnDisabled
 */
export function updateSave(that_, restPath, form) {
  //	that_.$confirm('确认提交吗？').then(_ => {
  // 加载中 
  const loading = common.loading(that_, '正在保存，请稍候!')
  that_.btnDisabled = true // 按钮禁用

  putObj(restPath, form).then(response => {
    loading.close() // 加载中 关闭
    that_.btnDisabled = false // 解除按钮禁用状态

    // 处理保存结果
    handleSaveRes(that_, response)
  }).catch(err => {
    loading.close() // 加载中 关闭
    that_.btnDisabled = false // 解除按钮禁用状态
    // 防止连续多次请求
    avoidMultRequest(that_)
    common.message(that_, 'error', 2, '调用接口失败!')
    console.error(err)
  })
  
}

/**
 * 处理保存结果
 * 		注意：调用该公共方法，需约定条件：
 * 		  1. 父组件刷新事件名为 flushList
 */
export function handleSaveRes(that_, response) {
  if(response.code === 200) {
    common.message(that_, 'success', 2, '保存成功!')
    that_.$emit('flushList') // 向父组件发送刷新事件
  } else {
    // 防止连续多次请求
    avoidMultRequest(that_)
    common.message(that_, 'warning', 2, response.message || '保存失败!')
  }
}

/**
 * 防止连续多次请求
 * 		注意：调用该公共方法，需约定条件：
 * 		  1. 必须有按钮禁用属性btnDisabled
 */
export function avoidMultRequest(that_) {
  // 按钮禁用
  that_.btnDisabled = true
  // 三秒后在解除按钮禁用状态
  setTimeout(function() {
    // 解除按钮禁用状态
    that_.btnDisabled = false
  }, 2000);
}